package cn.demoncat.util.lang.entity.data;

/**
 * 栈 - 有序列表，先入后出
 * 
 * @author 延晓磊
 *
 * @since 2020年6月28日
 */
public interface Stack<E> {
	
	/**
	 * 栈满异常
	 */
	RuntimeException FULL_EX =  new RuntimeException("栈已满");
	/**
	 * 栈空异常
	 */
	RuntimeException EMPTY_EX =  new RuntimeException("栈为空");

	 /**
     * 是否空栈
     * 
     * @return
     * 
     * @author 延晓磊
     *
     * @since 2020年6月28日
     */
	boolean isEmpty();
    
    /**
     * 入栈
     * 
     * @param e
     * 
     * @author 延晓磊
     *
     * @since 2020年6月28日
     */
	void push(E e);

    /**
     * 出栈
     * 
     * @return
     * 
     * @throws RuntimeException 栈空
     * 
     * @author 延晓磊
     *
     * @since 2020年6月28日
     */
	E pop();

    /**
     * 查看栈顶
     * 
     * @return 空栈返回null
     * 
     * @author 延晓磊
     *
     * @since 2020年6月28日
     */
	E peek();
    
    /**
     * 栈长
     * 
     * @return
     * 
     * @author 延晓磊
     *
     * @since 2020年6月28日
     */
	int size();
}
